package br.org.acessobrasil.portal.action;

import java.net.URLEncoder;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.org.acessobrasil.portal.facade.AvaliacaoHumanaFacade;
import br.org.acessobrasil.portal.modelo.AvaliacaoHumana;
import br.org.acessobrasil.portal.modelo.Pagina;
import br.org.acessobrasil.portal.modelo.Usuario;
import br.org.acessobrasil.portal.persistencia.PaginaDaoSpring;

public class AvaliacaoHumanaAction extends Super{
	private static final long serialVersionUID = 1L;
	
	private PaginaDaoSpring paginaDao;
	
	public AvaliacaoHumanaAction(PaginaDaoSpring paginaDao){
		this.paginaDao = paginaDao;
	}
	
	public String incluir(){
		try{
			Usuario usuario = getUsuarioLogado();
			if(usuario==null){//mandar ele fazer o login
				return INPUT;
			}
			String msg_erro=null; 
			AvaliacaoHumanaFacade avaliacaoHumanaFacade = new AvaliacaoHumanaFacade();
			AvaliacaoHumana avaliacaoHumana = new AvaliacaoHumana();
			HttpServletRequest request = getRequest();
			String statusAvaliacao = request.getParameter("statusAvaliacao");
			String comentario = request.getParameter("comentario");
			String url = request.getParameter("url");
			Long nuPagina = Long.parseLong(request.getParameter("nuPagina"));
			Pagina pagina = paginaDao.select(nuPagina);			
			Date date = new Date();
			avaliacaoHumana.setUrl(url);
			if(statusAvaliacao==null){
				msg_erro = "Por favor, diga se a p&aacute;gina est&aacute; com erros ou n&atilde;o.";
			}else if(statusAvaliacao.equals("COMERRO")){
				avaliacaoHumana.setComentario(comentario);
				avaliacaoHumana.setStatusAvaliacao(AvaliacaoHumana.StatusAvaliacao.COMERRO);
				avaliacaoHumana.setUsuarioAvaliador(usuario);
				avaliacaoHumana.setPagina(pagina);
				avaliacaoHumana.setDataHora(date);
				avaliacaoHumanaFacade.criar(usuario,avaliacaoHumana);
			}else{
				if(statusAvaliacao.equals("SEMERRO")){
					avaliacaoHumana.setComentario(comentario);
					avaliacaoHumana.setDataHora(date);
					avaliacaoHumana.setStatusAvaliacao(AvaliacaoHumana.StatusAvaliacao.SEMERRO);
					avaliacaoHumana.setUsuarioAvaliador(usuario);
					avaliacaoHumana.setPagina(pagina);
					avaliacaoHumanaFacade.criar(usuario,avaliacaoHumana);
				}else{
					msg_erro = "Esse status n&atilde;o existe.";
				}
			}
			//avaliacaoHumanaFacade.salvar(avaliacaoHumana);
			
			
			HttpServletResponse response = getResponse();
			//retirar possiveis mensagens anteriores
			url = url.replaceAll("\\&msg_avaliacao_humana=(.*?)\\&eot=1","");
			url = url.replaceAll("\\?msg_avaliacao_humana=(.*?)\\&eot=1","");
			if(msg_erro!=null){
				if(url.indexOf('?')!=-1){
					url+="&msg_avaliacao_humana=" +URLEncoder.encode(msg_erro,"iso-8859-1") + "&eot=1";
				}else{
					url+="?msg_avaliacao_humana=" +URLEncoder.encode(msg_erro,"iso-8859-1") + "&eot=1";
				}
			}else{
				//colocar a mensagem de sucesso
				if(url.indexOf('?')!=-1){
					url+="&msg_avaliacao_humana=Avaliado+com+sucesso.&eot=1";
				}else{
					url+="?msg_avaliacao_humana=Avaliado+com+sucesso.&eot=1";
				}
			}
			response.sendRedirect(url+"#msgAvaliacaoHumana");
		}catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}
	

}
